package homework007.service;

import homework007.dao.GoodsDao;
import homework007.domain.Goods;

import java.util.List;
import java.util.Objects;

/**
 * 商品服务
 *
 * @author itheima
 */
public class GoodsService {
    private GoodsDao dao = new GoodsDao();

    /**
     * 添加商品
     *
     * @param goods 商品信息
     * @return 是否添加成功
     */
    public boolean add(Goods goods) {
        return dao.add(goods);
    }

    /**
     * 删除商品
     *
     * @param id 商品编号
     * @return 是否删除成功
     */
    public boolean deleteById(String id) {
        int index = getIndexById(id);
        return dao.deleteByIndex(index);
    }

    /**
     * 修改商品信息
     *
     * @param id    商品编号
     * @param goods 商品信息
     * @return 是否修改成功
     */
    public boolean update(String id, Goods goods) {
        int index = getIndexById(id);
        return dao.update(index, goods);
    }


    /**
     * 查询所有商品
     *
     * @return 商品列表
     */
    public List<Goods> findAll() {
        return dao.findAll();
    }

    /**
     * 根据编号查询商品
     *
     * @param goodsId 商品编号
     * @return 商品信息
     */
    public Goods findById(String goodsId) {
        if (Objects.isNull(goodsId)) {
            return null;
        }

        List<Goods> goodList = dao.findAll();
        for (Goods goods : goodList) {
            if (goodsId.equals(goods.getId())) {
                return goods;
            }
        }

        return null;
    }

    /**
     * 判断商品ID的唯一性
     *
     * @param scId 商品ID
     * @return 是否存在
     */
    public boolean idIsExists(String scId) {
        List<Goods> goodList = dao.findAll();
        for (Goods goods : goodList) {
            if (scId.equals(goods.getId())) {
                return true;
            }
        }

        return false;
    }

    /**
     * 通过index找id
     *
     * @param id 商品编号
     * @return 索引
     */
    private int getIndexById(String id) {
        List<Goods> goodList = dao.findAll();
        for (int i = 0; i < goodList.size(); i++) {
            if (id.equals(goodList.get(i).getId())) {
                return i;
            }
        }

        return -1;
    }

}
